precision mediump float;

uniform vec2 u_resolution;
// 起点坐标
vec2 startP = vec2(0,0);

// 颜色集合
vec4 colors[4];
// 弧度集合
float rations[4];
// 一圈的弧度
float pi2 = radians(360.0);
void main (){
  // 将坐标系原点放置在中心
  vec2 uv = ( 2.0 * gl_FragCoord.xy - u_resolution.xy) / min(u_resolution.x,u_resolution.y);

  colors[0] = vec4(1,0,0, 1.0);
  colors[1] = vec4(0,1,1, 1.0);
  colors[2] = vec4(1,0,1, 0.462);
  colors[3] = vec4(1.0, 0.0, 0.0, 1.0);
  rations[0] = radians(0.0);
  rations[1] = radians(120.0);
  rations[2] = radians(240.0);
  rations[3] = radians(360.0);

  // 像素点减去起点后得到的向量
  vec2 sf = vec2(uv) - startP;
  // 反正切，获得的值是像素向量和正x轴的弧度
  float rad = atan(sf.y,sf.x);
  if(rad < 0.0){
    rad += pi2;
  }
  vec4 color = vec4(0);
  for(int i=0; i<4; i++){
    // 第一个弧度
    float rad1 = rations[i];
    // 第一个颜色
    vec4 color1 = colors[i];
     // 第二个弧度
    float rad2 = rations[i+1];
    // 第二个颜色
    vec4 color2 = colors[i+1];
    if(rad >= rad1 && rad <= rad2){
      // 颜色差值
      vec4 dc = color2 - color1;
      float dr = (rad - rad1) / (rad2 - rad1);
      color = color1 + dc * dr;
      break;
    }
  }
   gl_FragColor=color;
}